Java তে Hybrid Encryption বাস্তবায়ন

Java Technologies - জাভা ক্রিপ্টোগ্রাফি (Java Cryptography) - Hybrid Encryption Techniques
219

Hybrid Encryption একটি ক্রিপ্টোগ্রাফিক পদ্ধতি যা Symmetric এবং Asymmetric এনক্রিপশন টেকনিকের সংমিশ্রণ। এই পদ্ধতিতে, ডেটার এনক্রিপশন এবং ডিক্রিপশন করা হয় দুটি ভিন্ন এনক্রিপশন অ্যালগরিদম দিয়ে:

  1. Symmetric Encryption: দ্রুত ডেটা এনক্রিপশন করার জন্য, যেখানে একটি সিক্রেট কী (secret key) ব্যবহার করা হয়।
  2. Asymmetric Encryption: কী বিতরণ এবং নিরাপত্তার জন্য, যেখানে পাবলিক কী দিয়ে সিক্রেট কী এনক্রিপ্ট করা হয়, এবং প্রাইভেট কী দিয়ে সেই সিক্রেট কী ডিক্রিপ্ট করা হয়।

Hybrid Encryption মূলত ব্যবহৃত হয় performance এবং security এর মধ্যে একটি ভারসাম্য নিশ্চিত করার জন্য, যেমন সিমেট্রিক এনক্রিপশন ব্যবহার করে দ্রুত ডেটা এনক্রিপ্ট করা এবং অ্যাসিমেট্রিক এনক্রিপশন ব্যবহার করে সিক্রেট কী নিরাপদভাবে শেয়ার করা।


Java তে Hybrid Encryption বাস্তবায়ন

Hybrid Encryption প্রক্রিয়া সাধারণত তিনটি ধাপে কাজ করে:

  1. Symmetric Key Generation: প্রথমে একটি সিক্রেট কী তৈরি করা হয়।
  2. Data Encryption: সিক্রেট কী ব্যবহার করে ডেটা এনক্রিপ্ট করা হয়।
  3. Asymmetric Encryption for Key Exchange: সিক্রেট কী পাবলিক কী দিয়ে এনক্রিপ্ট করা হয় এবং এটি প্রাপককে পাঠানো হয়।
  4. Decryption: প্রাপক প্রাইভেট কী দিয়ে সিক্রেট কী ডিক্রিপ্ট করে এবং তারপর সেই সিক্রেট কী ব্যবহার করে ডেটা ডিক্রিপ্ট করে।

এখানে AES (Symmetric Encryption) এবং RSA (Asymmetric Encryption) ব্যবহার করে Hybrid Encryption বাস্তবায়ন করা হবে।

Hybrid Encryption Implementation উদাহরণ:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;
import java.util.Base64;

public class HybridEncryptionExample {

    // Generate a symmetric key (AES)
    public static SecretKey generateSymmetricKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128); // 128-bit AES key
        return keyGenerator.generateKey();
    }

    // Encrypt data using AES (symmetric encryption)
    public static String encryptData(String data, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    // Decrypt data using AES (symmetric decryption)
    public static String decryptData(String encryptedData, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(decryptedBytes);
    }

    // Encrypt the symmetric key using RSA (asymmetric encryption)
    public static String encryptSymmetricKey(SecretKey secretKey, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedKey = cipher.doFinal(secretKey.getEncoded());
        return Base64.getEncoder().encodeToString(encryptedKey);
    }

    // Decrypt the symmetric key using RSA (asymmetric decryption)
    public static SecretKey decryptSymmetricKey(String encryptedKey, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedKey = cipher.doFinal(Base64.getDecoder().decode(encryptedKey));
        return new SecretKeySpec(decryptedKey, "AES");
    }

    public static void main(String[] args) throws Exception {
        // Step 1: Generate a symmetric key (AES)
        SecretKey symmetricKey = generateSymmetricKey();

        // Step 2: Encrypt the data using the symmetric key
        String data = "This is a confidential message!";
        String encryptedData = encryptData(data, symmetricKey);
        System.out.println("Encrypted Data: " + encryptedData);

        // Step 3: Generate an RSA key pair (for asymmetric encryption)
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048); // 2048-bit RSA key
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();

        // Step 4: Encrypt the symmetric key using the RSA public key
        String encryptedSymmetricKey = encryptSymmetricKey(symmetricKey, publicKey);
        System.out.println("Encrypted Symmetric Key: " + encryptedSymmetricKey);

        // Step 5: Decrypt the symmetric key using the RSA private key
        SecretKey decryptedSymmetricKey = decryptSymmetricKey(encryptedSymmetricKey, privateKey);

        // Step 6: Decrypt the data using the decrypted symmetric key
        String decryptedData = decryptData(encryptedData, decryptedSymmetricKey);
        System.out.println("Decrypted Data: " + decryptedData);
    }
}

ব্যাখ্যা:

  1. Symmetric Key Generation (AES): এখানে একটি সিমেট্রিক কী তৈরি করা হচ্ছে যা AES অ্যালগরিদম ব্যবহার করে।
  2. Data Encryption: ডেটা AES কী ব্যবহার করে এনক্রিপ্ট করা হয়েছে।
  3. Asymmetric Key Encryption (RSA): সিমেট্রিক কীটি RSA পাবলিক কী ব্যবহার করে এনক্রিপ্ট করা হচ্ছে, যা নিরাপদভাবে প্রাপকের কাছে পাঠানো যাবে।
  4. Decryption: প্রাপক তার RSA প্রাইভেট কী ব্যবহার করে সিক্রেট কী ডিক্রিপ্ট করে এবং তারপর AES সিক্রেট কী দিয়ে ডেটা ডিক্রিপ্ট করে।

Output:

Encrypted Data: K2+VylXJbMptQmgLgP7ZlF1qchVqB0bbzVITk3dQfHqE=
Encrypted Symmetric Key: IL7vgzyhP0dqsUwHpeaxOWpXJng1zGJldnZ4WYX01Vtc5F0jDlyrV0wrGmb6uJ5z48Vt6b3L3AhR0g5otwqV6kRwv7w98N7rBQU3OMdbFzA1H8OT6ed9AqaZZXwkpJ4cohnx7mTTH1S6JcL8h0NE5wh7O6oyuwp0GiwrBsdik0sY8y9AwFv0kSzDlFq2wD5xRUhuDItUwQXbAMGkq
Decrypted Data: This is a confidential message!

ব্যাখ্যা:

  • Symmetric Key (AES) দিয়ে ডেটা এনক্রিপ্ট করা হয়েছে।
  • সেই Symmetric Key RSA পাবলিক কী দিয়ে এনক্রিপ্ট করা হয়েছে।
  • প্রাপক তার RSA প্রাইভেট কী দিয়ে সিক্রেট কী ডিক্রিপ্ট করেছে এবং তারপর সেই সিক্রেট কী ব্যবহার করে ডেটা ডিক্রিপ্ট করেছে।

Hybrid Encryption এর সুবিধা

  1. Security: Asymmetric encryption ব্যবহার করে symmetric key নিরাপদভাবে শেয়ার করা হয়, যা ডেটার নিরাপত্তা নিশ্চিত করে।
  2. Performance: Symmetric encryption দ্রুত এবং কম্পিউটেশনাল শক্তি কম ব্যবহার করে, তাই ডেটা এনক্রিপশন এবং ডিক্রিপশন দ্রুত হয়।
  3. Efficiency: হাইব্রিড এনক্রিপশন পদ্ধতি Symmetric এবং Asymmetric এনক্রিপশন টেকনিকের সেরা বৈশিষ্ট্যগুলির সংমিশ্রণ, যা দ্রুত এবং নিরাপদ ডেটা ট্রান্সফার নিশ্চিত করে।

Hybrid Encryption হল একটি শক্তিশালী ক্রিপটোগ্রাফিক পদ্ধতি যা Symmetric এবং Asymmetric এনক্রিপশনকে সংমিশ্রিত করে। Java তে এটি বাস্তবায়ন করার জন্য AES (Symmetric) এবং RSA (Asymmetric) ব্যবহার করা হয়। এই পদ্ধতি ডেটার নিরাপত্তা এবং কী শেয়ারিং প্রক্রিয়া নিশ্চিত করে, যা আধুনিক অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...